package main

import "fmt"

// BeautyWoman 抽象的主题
type BeautyWoman interface {
	// MakeEyesWithMan 对男人抛媚眼
	MakeEyesWithMan()
	// HappyWithMan 和男人共度美好时光
	HappyWithMan()
}

// 具体的主题

type PanJinLian struct {
}

// MakeEyesWithMan 对男人抛媚眼
func (pjl *PanJinLian) MakeEyesWithMan() {
	fmt.Println("潘金莲对本官抛了个媚眼...")
}

// HappyWithMan 和男人共度美好时光
func (pjl *PanJinLian) HappyWithMan() {
	fmt.Println("潘金莲和本官共度了美好时光..")
}

// WangPo 中间代理人 王婆
type WangPo struct {
	woman BeautyWoman
}

func NewProxy(woman BeautyWoman) BeautyWoman {
	return &WangPo{woman}
}

// MakeEyesWithMan 对男人抛媚眼
func (wp *WangPo) MakeEyesWithMan() {
	wp.woman.MakeEyesWithMan()
}

// HappyWithMan 和男人共度美好时光
func (wp *WangPo) HappyWithMan() {
	wp.woman.HappyWithMan()
}

// main 业务逻辑  西门大官人
func main() {
	// 大官人想找金莲 让王婆来安排
	wangpo := NewProxy(new(PanJinLian))
	// 王婆命令金莲对本官抛媚眼
	wangpo.MakeEyesWithMan()
	//王婆命令金莲和西门大官人约会
	wangpo.HappyWithMan()

}
